/**
 * 高德地图工具类 (兼容 @vuemap/vue-amap)
 */
export default class MapUtils {
  /**
   * 地址逆编码：根据经纬度获取地址信息
   * @param {number} longitude - 经度
   * @param {number} latitude - 纬度
   * @returns {Promise<object>} - 地址信息对象
   */
  static async getAddressByLocation(longitude, latitude) {
    return new Promise((resolve, reject) => {
      // 检查高德地图 API 是否已加载
      if (!window.AMap) {
        reject(new Error('高德地图API未加载'));
        return;
      }

      // 使用 vue-amap 兼容的方式调用逆地理编码
      const lnglat = new window.AMap.LngLat(longitude, latitude);
      
      // 创建地理编码实例
      window.AMap.plugin(['AMap.Geocoder'], () => {
        const geocoder = new window.AMap.Geocoder({
          // 可以设置逆地理编码的参数
          radius: 1000, // 搜索范围
          extensions: 'all' // 返回完整地址信息
        });
        
        // 调用逆地理编码接口
        geocoder.getAddress(lnglat, (status, result) => {
          if (status === 'complete' && result.info === 'OK') {
            // 返回格式化后的地址信息
            const addressComponent = result.regeocode.addressComponent;
            const formattedAddress = result.regeocode.formattedAddress;
            
            resolve({
              formattedAddress,
              province: addressComponent.province,
              city: addressComponent.city,
              district: addressComponent.district,
              township: addressComponent.township,
              street: addressComponent.street,
              streetNumber: addressComponent.streetNumber,
              neighborhood: addressComponent.neighborhood,
              building: addressComponent.building,
              adcode: addressComponent.adcode,
              pois: result.regeocode.pois, // 附近的兴趣点
              raw: result.regeocode
            });
          } else {
            reject(new Error('获取地址信息失败'));
          }
        });
      });
    });
  }
  
  /**
   * 获取简化后的地址表示（仅城市和区）
   * @param {number} longitude - 经度
   * @param {number} latitude - 纬度
   * @returns {Promise<string>} - 简化的地址字符串
   */
  static async getSimpleAddress(longitude, latitude) {
    try {
      const addressInfo = await this.getAddressByLocation(longitude, latitude);
      let simpleAddress = '';
      
      if (addressInfo.city) {
        simpleAddress += addressInfo.city;
      }
      
      if (addressInfo.district) {
        simpleAddress += ' ' + addressInfo.district;
      }
      
      return simpleAddress || addressInfo.formattedAddress || '未知位置';
    } catch (error) {
      console.error('获取简化地址失败:', error);
      return '未知位置';
    }
  }
}
